package com.codename1.samples;

import static com.codename1.ui.CN.*;
import com.codename1.ui.Display;
import com.codename1.ui.Form;
import com.codename1.ui.Dialog;
import com.codename1.ui.Label;
import com.codename1.ui.plaf.UIManager;
import com.codename1.ui.util.Resources;
import com.codename1.io.Log;
import com.codename1.ui.Toolbar;
import java.io.IOException;
import com.codename1.ui.layouts.BoxLayout;
import com.codename1.io.NetworkEvent;
import com.codename1.ui.Component;
import com.codename1.ui.Container;
import com.codename1.ui.Tabs;
import com.codename1.ui.layouts.BorderLayout;

/**
 * This file was generated by <a href="https://www.codenameone.com/">Codename
 * One</a> for the purpose of building native mobile applications using Java.
 */
public class DraggableTabsSample {

    private Form current;
    private Resources theme;

    public void init(Object context) {
        // use two network threads instead of one
        updateNetworkThreadCount(2);

        theme = UIManager.initFirstTheme("/theme");

        // Enable Toolbar on all Forms by default
        Toolbar.setGlobalToolbar(true);

        // Pro only feature
        Log.bindCrashProtection(true);

        addNetworkErrorListener(err -> {
            // prevent the event from propagating
            err.consume();
            if (err.getError() != null) {
                Log.e(err.getError());
            }
            Log.sendLogAsync();
            Dialog.show("Connection Error", "There was a networking error in the connection to " + err.getConnectionRequest().getUrl(), "OK", null);
        });
    }

    public void start() {
        if (current != null) {
            current.show();
            return;
        }
        Form hi = new Form("Tabs", new BorderLayout());

        Tabs t = new Tabs();

        t.addTab("T1", new Label("Tab 1"));
        t.addTab("T2", new Label("Tab 2"));
        t.addTab("T3", new Label("Tab 3"));
        t.addTab("T4", new Label("Tab 4"));

        Container tabsC = t.getTabsContainer();
        tabsC.setDropTarget(true);
        for (Component c : tabsC) {
            c.setDraggable(true);
            c.addDropListener(e -> {
                e.consume();
                Component dragged = c;
                int x = e.getX();
                int y = e.getY();
                int i = tabsC.getComponentIndex(dragged);
                if (i > -1) {
                    Component dest = tabsC.getComponentAt(x, y);
                    if (dest != dragged) {
                        Component source = t.getTabComponentAt(i);
                        int destIndex = tabsC.getComponentIndex(dest);
                        if (destIndex > -1 && destIndex != i) {
                            String title = t.getTabTitle(i);
                            t.removeTabAt(i);
                            if (destIndex > i) {
                                t.insertTab(title, null, source, destIndex - 1);
                            } else {
                                t.insertTab(title, null, source, destIndex);
                            }
                        }
                    }
                    tabsC.animateLayout(400);
                }
            });
        }

        hi.add(CENTER, t);
        hi.show();
    }

    public void stop() {
        current = getCurrentForm();
        if (current instanceof Dialog) {
            ((Dialog) current).dispose();
            current = getCurrentForm();
        }
    }

    public void destroy() {
    }

}
